package bean;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;

import bean.vo.ItemRemitoVO;

@Entity 
@Table( name = "items_remito" )
public class ItemRemito extends EntidadPersistente{
	@ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH} )
	@Cascade( org.hibernate.annotations.CascadeType.SAVE_UPDATE)
	private Producto producto;
	private Integer cantidad;
	@ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH} )
	@Cascade( org.hibernate.annotations.CascadeType.SAVE_UPDATE)
	private OrdenPedido ordenReferencia;

	@ManyToOne
	private Remito remito;
	
	public ItemRemito () {}
	
	public ItemRemito (Remito remito, Producto producto, Integer cantidad){
		this.remito = remito;
		this.producto = producto;
		this.cantidad = cantidad;
	}
	
	public ItemRemitoVO getVO() {
		ItemRemitoVO vo = new ItemRemitoVO();
		vo.setCantidad(cantidad);
		vo.setProducto(producto != null ? producto.getVO() : null);
		vo.setOrdenReferencia(ordenReferencia != null? ordenReferencia.getVO() : null);
		
		return vo;
	}
	
	public Producto getProducto() {
		return producto;
	}
	
	public void setProducto(Producto producto) {
		this.producto = producto;
	}
	
	public int getCantidad() {
		return cantidad;
	}
	
	public void setCantidad(Integer cantidad) {
		this.cantidad = cantidad;
	}

	public Remito getRemito() {
		return remito;
	}

	public void setRemito(Remito remito) {
		this.remito = remito;
	}
	
	public OrdenPedido getOrdenReferencia() {
		return ordenReferencia;
	}

	public void setOrdenReferencia(OrdenPedido ordenReferencia) {
		this.ordenReferencia = ordenReferencia;
	}
	
	@Override
	public int hashCode() {
		final int primo = 31;
		int result = 1;
		result = primo * (result + (producto == null ? 0 : producto.hashCode()) + (remito == null ? 0 : remito.hashCode()));
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj) return true;	
		if ((obj == null) || (!(obj instanceof ItemRemito))) {
			return false;
		}
		
		ItemRemito otro = (ItemRemito) obj;
		
		boolean mismoProducto = (producto!=null && otro.producto != null ? (producto.equals(otro.producto)) : false);
		boolean mismoRemito = (remito!=null && otro.remito != null ? (remito.equals(otro.remito)) : false);
		
		return mismoProducto && mismoRemito;
	}
}
